package com.goodlearning.gloriamobile.customview;

import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

/**
 * 일반Button을 Group화 한다.
 * *native ui thread에 연계하지않고 Button들의  OnClickListner를 일괄 할당하기에, 그룹화이후 각 Button들의 직접적인 OnClickListner를 Override시 문제가발생하므로 이 클래스의 setOnCheckedChangeListener를 Override하여야한다.   
 * @author yh
 *
 */
public class ButtonGroup implements OnClickListener{

	public interface OnCheckedChangeListener{
		public void onCheckedChange(Button button);
	}
	
	private int checkBtnId=-1;
	private int checkBtnIdx=-1;
	private Button[] buttons;
	
	public OnCheckedChangeListener checkedChangeListener = new OnCheckedChangeListener() {
		
		@Override
		public void onCheckedChange(Button button) {
			
			
		}
	};
	
	public ButtonGroup(Activity activity, int[] buttonIds, boolean firstBtnPressed) {
		this.buttons = new Button[buttonIds.length];
		for (int i = 0; i < buttons.length; i++) {
			buttons[i] = (Button) activity.findViewById(buttonIds[i]);
			buttons[i].setOnClickListener(this);
		}
		
		if(firstBtnPressed){
			checkBtnId = buttons[0].getId();
			checkBtnIdx = 0;
			check(checkBtnId);
		}
	}
	/**
	 * 추가된 Type Tab 버튼 초기 
	 * @param activity
	 * @param buttonIds
	 * @param firstBtnPressed
	 * @param otherType  otherType 에 값을 넣으면 해당 가운데 Tab 위치로 이동한다.
	 */
	public ButtonGroup(Activity activity, int[] buttonIds, boolean firstBtnPressed,boolean otherType) {
		this.buttons = new Button[buttonIds.length];
		for (int i = 0; i < buttons.length; i++) {
			buttons[i] = (Button) activity.findViewById(buttonIds[i]);
			buttons[i].setOnClickListener(this);
		}
		
		if(otherType){
			checkBtnId = buttons[1].getId();
			checkBtnIdx = 1;
			check(checkBtnId);
		}
		
	}
	public ButtonGroup(View view, int[] buttonIds, boolean firstBtnPressed) {
		this.buttons = new Button[buttonIds.length];
		for (int i = 0; i < buttons.length; i++) {
			buttons[i] = (Button) view.findViewById(buttonIds[i]);
			buttons[i].setOnClickListener(this);
		}
		if(firstBtnPressed){
			checkBtnId = buttons[0].getId();
			checkBtnIdx = 0;
			check(checkBtnId);
		}
	}
	
	/**
	 * 모든 버튼을 눌림 해제된 상태로 하고 id,idx값또한 초기화한다.
	 */
	public void init(){
		for (int i = 0; i < buttons.length; i++) {
			buttons[i].setEnabled(true);
		}
		checkBtnId = -1;
		checkBtnIdx = -1;
	}

	public void check(int id) {
		for (int i = 0; i < buttons.length; i++) {
			if(id == buttons[i].getId()){
				checkBtnId = buttons[i].getId();
				checkBtnIdx = i;
				buttons[i].setEnabled(false);
				//onClick(buttons[i]);
			}else{
				buttons[i].setEnabled(true);
			}
			
		}
	} 

	/**
	 *	 선택된 ButtonId 반환. 선택된 Button이 없다면 -1반환
	 */
	public int getCheckedButtonId() {
		return checkBtnId;
	}
	
	/**
	 *	 선택된 Button의 순서 반환. 선택된 Button이 없다면 -1반환
	 */
	public int getCheckedButtonIdx(){
		/*int idx = -1;
		for (int i = 0; i < buttons.length; i++) {
			if(buttons[i].getId() == checkBtnId){
				idx = i;
				break;
			}
		}*/
		return checkBtnIdx;
	}
	
	@Override
	public void onClick(View v) {
		checkBtnId = v.getId();
		for (int i = 0; i < buttons.length; i++) {
			if(v.getId() == buttons[i].getId()){
				checkBtnIdx = i;
			}
			buttons[i].setEnabled(true);
		}
		v.setEnabled(false);
		checkedChangeListener.onCheckedChange((Button)v);
	}

	public void setOnCheckedChangeListener(OnCheckedChangeListener listner) {
		checkedChangeListener = listner;
		
	}

	
	/**
	 * 지정버튼을 비활성화한다.(OnClick 무관)
	 * @param buttonResId
	 */
	public void setSelectedBtnForId(int buttonResId){
		for (int i = 0; i < buttons.length; i++) {
			if(buttons[i].getId() == buttonResId){
				buttons[i].setEnabled(false);
				checkBtnId = buttonResId;
				checkBtnIdx = i;
			}else{
				buttons[i].setEnabled(true);
			}
		}
	}

	/**
	 * 지정버튼을 비활성화한다.(OnClick 무관)
	 * @param buttonResId
	 */
	public void setSelectedBtnForIdx(int idx){
		for (int i = 0; i < buttons.length; i++) {
			if(i == idx){
				buttons[i].setEnabled(false);
				checkBtnId = buttons[i].getId();
				checkBtnIdx = i;
			}else{
				buttons[i].setEnabled(true);
			}
		}
	}


		
	
}

